using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;

namespace FiltronASP.Models.DAO.Interfaces
{
    /// <summary>
    /// Interfejs dla operacji bazodanowych specyficznych dla tabeli <code>languages</code>.
    /// </summary>
    public interface ILanguageDAO : IGenericDAO<Language, System.Nullable<int>>
    {
        /// <summary>
        /// Pobieranie obiektu na podstawie unikalnego skrotu.
        /// </summary>
        /// <param name="languageAbbr">skrot</param>
        /// <returns>rekord o zadanym skrocie lub null, gdy nie ma</returns>
        Language FindByAbbr(string languageAbbr);

        /// <summary>
        /// Pobieranie listy obiektow na podstawie ich nazwy.
        /// </summary>
        /// <param name="languageName">nazwa</param>
        /// <returns>lista rekordow o zadanej nazwie</returns>
        IQueryable<Language> FindByName(string languageName);

        /// <summary>
        /// Pobieranie domyslnego jezyka.
        /// </summary>
        /// <returns>domyslny jezyk</returns>
        Language GetDefaultLanguage(int? userId);

        /// <summary>
        /// Pobieranie domyslnego jezyka.
        /// </summary>
        /// <returns>domyslny jezyk</returns>
        Language GetDefaultLanguage();

        /// <summary>
        /// Pobieranie listy wersji jezykowych dostepnych dla uzytkownika.
        /// </summary>
        /// <param name="userId">id uzytkownika</param>
        /// <returns>lista rekordow</returns>
        IQueryable<Language> FindAcceptableByUserId(int? userId);

    }
}
